using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace AppManagement.Repositories
{
	#region using
	using AppManagement.Models;
	using AppManagement.Helpers;
	#endregion

	public class NhanVienRepository
	{
        public static List<NhanVien> SelectTaiXes()
        {
            try
            {
                var nvTaiXe = StringEnum.GetStringValue(LoaiNhanVien.TAI_XE);
                return DataContext.Instance.NhanVien.Where(n => n.LoaiNhanVien.Equals(nvTaiXe)).ToList();
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    GlobalVariables.Logger.Error(ex.InnerException.Message);
                }
                else
                {
                    GlobalVariables.Logger.Error(ex.Message);
                }
            }
            return new List<NhanVien>();
        }

		public static List<NhanVien> SelectAll()
		{
			try
			{
				return DataContext.Instance.NhanVien.ToList();
			}
			catch(Exception ex)
			{
				if (ex.InnerException != null)
				{
					GlobalVariables.Logger.Error(ex.InnerException.Message);
				}
				else
				{
					GlobalVariables.Logger.Error(ex.Message);
				}
			}
			return new List<NhanVien>();
		}

		public static NhanVien SelectByID(int manhanvien)
		{
			try
			{
				return DataContext.Instance.NhanVien.FirstOrDefault(item => item.MaNhanVien == manhanvien );
			}
			catch(Exception ex)
			{
				if (ex.InnerException != null)
				{
					GlobalVariables.Logger.Error(ex.InnerException.Message);
				}
				else
				{
					GlobalVariables.Logger.Error(ex.Message);
				}
			}
			return null;
		}

		public static bool Insert(NhanVien obj)
		{
			try
			{
				DataContext.Instance.NhanVien.AddObject(obj);
				DataContext.Instance.SaveChanges();
				return true;
			}
			catch(Exception ex)
			{
				if (ex.InnerException != null)
				{
					GlobalVariables.Logger.Error(ex.InnerException.Message);
				}
				else
				{
					GlobalVariables.Logger.Error(ex.Message);
				}
			}
				return false;
		}

		public static bool Delete(int manhanvien)
		{
			try
			{
				var delitem = DataContext.Instance.NhanVien.FirstOrDefault(item => item.MaNhanVien == manhanvien );
				DataContext.Instance.NhanVien.DeleteObject(delitem);
				DataContext.Instance.SaveChanges();
				return true;
			}
			catch(Exception ex)
			{
				if (ex.InnerException != null)
				{
					GlobalVariables.Logger.Error(ex.InnerException.Message);
				}
				else
				{
					GlobalVariables.Logger.Error(ex.Message);
				}
			}
				return false;
		}

		public static bool Save()
		{
			try
			{
				DataContext.Instance.SaveChanges();
				return true;
			}
			catch(Exception ex)
			{
				if (ex.InnerException != null)
				{
					GlobalVariables.Logger.Error(ex.InnerException.Message);
				}
				else
				{
					GlobalVariables.Logger.Error(ex.Message);
				}
			}
				return false;
		}

		public static List<NhanVien> RetrieveByID(int manhanvien)
		{
			try
			{
				return (from item in DataContext.Instance.NhanVien where  item.MaNhanVien == manhanvien  select item).ToList();
			}
			catch(Exception ex)
			{
				if (ex.InnerException != null)
				{
					GlobalVariables.Logger.Error(ex.InnerException.Message);
				}
				else
				{
					GlobalVariables.Logger.Error(ex.Message);
				}
			}
			return new List<NhanVien>();
		}

        public static NhanVien SelectByUserName(string username)
        {
            try
            {
                return DataContext.Instance.NhanVien.FirstOrDefault(item => item.TenDangNhap == username);
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    GlobalVariables.Logger.Error(ex.InnerException.Message);
                }
                else
                {
                    GlobalVariables.Logger.Error(ex.Message);
                }
            }
            return null;
        }

        public static NhanVien SelectByUserNameAndPassword(string username, string password)
        {
            try
            {
                return DataContext.Instance.NhanVien.FirstOrDefault(item => item.TenDangNhap == username && item.MatKhau == password);
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    GlobalVariables.Logger.Error(ex.InnerException.Message);
                }
                else
                {
                    GlobalVariables.Logger.Error(ex.Message);
                }
            }
            return null;
        }

        public static List<NhanVien> Search(string manv, string tennv, string loainv)
        {
            try
            {
                int manvVal = string.Empty.Equals(manv) ? -1 : int.Parse(manv);
                return DataContext.Instance.NhanVien.Where(
                    n => n.MaNhanVien == (string.Empty.Equals(manv) ? n.MaNhanVien : manvVal) &&
                    n.HoTen.Contains((string.Empty.Equals(tennv) ? n.HoTen.Trim().ToUpper() : tennv.Trim().ToUpper())) &&
                    n.LoaiNhanVien == (string.Empty.Equals(loainv) ? n.LoaiNhanVien : loainv)).ToList();
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    GlobalVariables.Logger.Error(ex.InnerException.Message);
                }
                else
                {
                    GlobalVariables.Logger.Error(ex.Message);
                }
            }
            return new List<NhanVien>();
        }
	}

}
